//
//  XLHomeTableViewController.swift
//  XLVeibo
//
//  Created by macbook on 16/6/23.
//  Copyright © 2016年 buWangChuXing. All rights reserved.
//

import UIKit

//cell的可用标识
private  let statusCellId = "statusCellId"

class XLHomeTableViewController: XLVisitorTableViewController {

    //定义一个可变数组用来存储数据模型
    var statusArrM:[XLStatus] = [XLStatus]()
    
    //菊花指示器  添加到tableVIews上会自动跑到顶部，下拉时就会转动
    let refresh = XLRefresh()
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        //判断用户是否登录 设置访客视图或者登录界面
        if !isLogin {
            
            vistorView?.setupVistorInfor(nil, title: nil)
            return
        }
        
        
        setupTableViewInfo()
        
        //数据
        loadStatusData(activityView.isAnimating())
    }
    
    
    
    // MARK: - 设置tableView的属性，注册cell
    func setupTableViewInfo(){
    
        //获取Class格式  格式：类名.self
        tableView.registerClass(XLStatusTableViewCell.self, forCellReuseIdentifier: statusCellId)
        
        // MARK: - 自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
       tableView.estimatedRowHeight = 200
        //设置分割线的样式
        tableView.separatorStyle = .None
        
        //设置footView
        tableView.tableFooterView = activityView

        //添加 下拉就可以自定转动
        tableView.addSubview(refresh)
        
        
        //添加事件，开始旋转就会调用
        refresh.addTarget(self, action: #selector(XLHomeTableViewController.refreshAction), forControlEvents: UIControlEvents.ValueChanged)

    }
    
    //监听事件
    @objc private func refreshAction(){
    
        loadStatusData(activityView.isAnimating())
    
    }
    
    
    //懒加载控件 上拉刷新的控件
    private lazy var  activityView:UIActivityIndicatorView = {
        
        let act = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        
        //设置颜色
         act.color = ThemeColor
          return act
    }()
    
    
    //第一次加载显示刷新多少条数据
    private lazy var pullDownLabel:UILabel = {
    
        let lab = UILabel()
        lab.backgroundColor = ThemeColor
        lab.textAlignment = NSTextAlignment.Center
        lab.frame = CGRect(x: 0, y: 64 - 34, width: KScreenW, height: 34)
        lab.alpha = 0
        return lab
    }()

    
}




extension XLHomeTableViewController{
    
    
    
    func loadStatusData(pullUp:Bool){
        
        // 如果我们sinceId = 0 && maxId = 0 系统默认就相当于我们只传accessToken
        //        如果 下拉刷新 MaxId = 0 代表我要拿时间最新的微博
        //        如果 上拉加载更多 SinceI的 = 0 代表我要拿时间更早的微博
        

    
        var sinceId:Int64 = 0
        var maxId:Int64 = 0
        
        //上拉加载更多 true
        if pullUp {
              
            maxId = statusArrM.last?.id ?? 0
            print(maxId)
            //则返回的Id小于或者等于max_id的微博
            if maxId > 0 {
                maxId -= 1
            }
          
        }else{
          
            //下拉刷新
            sinceId = statusArrM.first?.id ?? 0
            self.pullDownTibLabelAnim(statusArrM.count)
        }
        
        
        XLNetworkTools.sharedTools.homeLoadStatusData(sinceId, maxId: maxId, success: { (response) in
            
            //菊花停止转动
            self.endRefreshing()
            
            
            //判断请求回来的是否有值，是否是一个数组
            guard let res = response?["statuses"] as? [[String:AnyObject]]else{
            
                return
            }
            
            var temeArray:[XLStatus] = [XLStatus]()
            
            for dict in res {
            
                //字典转模型
                let statusModel = XLStatus(dict: dict)
                
                temeArray.append(statusModel)
            
            }
            
            //上拉加载更多
            if pullUp{
                
                self.statusArrM = self.statusArrM + temeArray
            }else{
            
                //下拉刷新
                self.statusArrM = temeArray + self.statusArrM
            }
            
            //刷新UI
            self.tableView.reloadData()
            
            
            
            }) { (error) in
                
                print("加载失败\(error)")
        }
    
    }
    
    
    //
    func pullDownTibLabelAnim(count:Int){
    
        //添加label
        if pullDownLabel.superview == nil {
            
            navigationController!.view.insertSubview(pullDownLabel, belowSubview: navigationController!.navigationBar)
        }
        var text = ""
        if count > 0 {
            
            text = "您更新了\(count)条微博"
        }else{
        
            text = "您目前是最新微博"
        }
        
        //设置text
        pullDownLabel.text = text
        
        
        
        UIView.animateWithDuration(0.75, animations: {
            self.pullDownLabel.alpha = 1
            self.pullDownLabel.transform = CGAffineTransformMakeTranslation(0, 34)
            }) { (_) in
                
                UIView.animateWithDuration(0.75, animations: {
                    self.pullDownLabel.transform = CGAffineTransformIdentity
                    }, completion: { (_) in
                        
                        self.pullDownLabel.alpha = 0
            })
        }
     }
    
    
    
    //结束动画
    func endRefreshing(){
    
        self.activityView.stopAnimating()
        self.refresh.endRefreshing()
    }
 }


extension XLHomeTableViewController{

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        //应为第一次加载可能为空  所有  来了一个0
        return statusArrM.count ?? 0
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        //创建cell  注册的方式
        let cell = tableView.dequeueReusableCellWithIdentifier(statusCellId, forIndexPath: indexPath) as! XLStatusTableViewCell
        
         cell.backgroundColor = RBG(237, green: 237, blue: 237)
        cell.status = statusArrM[indexPath.row]
        return cell
        
        }
    
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        if statusArrM.count == indexPath.row + 1 && !activityView.isAnimating(){
            
             //开启动画
            activityView.startAnimating()
            
            //请求数据
            loadStatusData(activityView.isAnimating())
        }
    }
}









